import { _decorator, Component, instantiate, Label, Node, Prefab, Sprite, SpriteFrame } from 'cc';
import { UIHeader } from '../common/UIHeader';
import { EventManager } from '../event/EventManager';
import { UIManager } from '../common/UIManager';
import { PrefabEnum } from '../common/PrefabEnum';
import RombawApi from '../api/RombawApi';
import { UserInfo } from '../common/UserInfo';
import { RombawIng } from '../entity/RombawIng';
import { BackpackItem } from './BackpackItem'


const { ccclass, property } = _decorator;

@ccclass('Rombaw')
export class Rombaw extends Component {
  @property(UIHeader)
  uiHeader: UIHeader
  /**用来存放需要循环的背包物品 */
  @property(Node)
  content: Node
  /**当前选中物品名字 */
  @property(Label)
  selectRom: Label
  /**当前选中物品数量 */
  @property(Label)
  selectNum: Label
  /**当前选中物品介绍 */
  @property(Label)
  selectDesc: Label
  /**使用按钮框 */
  @property(Node)
  useFrame: Node
  /**使用按钮 */
  @property(Node)
  configBtn: Node
  /**使用按钮样式 */
  @property(Label)
  configLabel: Label
  @property(Sprite)
  selectItemImg:Sprite


  /**库存是array,backpackItem用来循环 */
  @property(Prefab)
  backpackItem: Prefab
  /**当前库存自定义数组 */
  itemList: RombawIng[] = []
  romConfig: any;
  start() {
    this.uiHeader.setData('背包')
    EventManager.instance.on('背包close', () => {
      UIManager.instance.closeUI(PrefabEnum.Rombaw)
    }, this)

    this.configBtn.on(Node.EventType.TOUCH_END, this.configBtns, this)

    this.getList()
    EventManager.instance.on(EventManager.EventType.romList, this.romList, this)
  }

  // 使用方法
  async configBtns() {
    // 如果isOperationUse是true可点击
    if (!this.romConfig.isOperationUse) {

      return
    }
    // 请求使用接口
    UIManager.instance.showLoading()
    const res = await RombawApi.useItem(this.romConfig.id, 1, this.romConfig.type)
    console.log(res)
    UIManager.instance.closeLoading()
    if (res.code != 0) {
      UIManager.instance.modal('提示', '使用失败' + res.code, false)
      return
    }
    /**使用物品接口返回的自定义数据 */
    let resData = RombawIng.createByRombawIngObj(res.data)

    // 循环使用成功后的数组
    resData.forEach(v => {
      // 对比旧数据,拿到 同一个对象
      if (this.romConfig.typeId == v.typeId) {
        // 循环旧的标签
        for (let ch of this.content.children) {
          let bpi = ch.getComponent(BackpackItem)
          /**旧标签内的typeId */
          let typeId = bpi.rom.typeId
          // 用旧标签typeid做判断,拿到新数据typeid和他相等的数据
          if (typeId == v.typeId) {
            // 对比num是否等0   true使用成功 false使用失败
            if (bpi.rom.num - v.num == 0) {
              
              UIManager.instance.modal('提示', '道具使用失败：当前没有适配的任务', false)
            } else {
              UIManager.instance.modal('提示', '道具使用成功！已自动匹配进行中的任务并使用道具', false)
              /**刷新userinfo状态数据内容 */
              UserInfo.instance.refreshVillageDetail()
            }
            bpi.setData(v)
          }
        }
      }
    })

    this.getList()

  }

  async romList(rom: RombawIng) {
    this.romConfig = rom
    this.selectRom.string = rom.category
    this.selectNum.string = '拥有' + rom.num
    this.selectDesc.string = rom.name
    if (rom.isOperationUse) {
      this.configLabel.string = '使用'
    } else {
      this.configLabel.string = '不可使用'
    }

    this.selectItemImg.spriteFrame = await rom.getRombawIngImg()
  }

  async getList() {
    UIManager.instance.showLoading()
    const arrList = await RombawApi.list()
    UIManager.instance.closeLoading()

    this.itemList = RombawIng.createByRombawIngObj(arrList.data)
    console.log(arrList.data)
    console.log(this.itemList)
    /**宝库库存根据循环新建标签 */
    this.content.destroyAllChildren()
    let have = false
    
    for (let item of this.itemList) { 
      if(this.romConfig && item.typeId == this.romConfig.typeId){
        this.romConfig = item
        have = true
      }
      let gameObject = instantiate(this.backpackItem)
      this.content.addChild(gameObject)
      gameObject.getComponent(BackpackItem).setData(item)
    }

    if(have){
      this.romList(this.romConfig)
    } else {
      this.romList(this.itemList[0])
    }
    
  }


}


